home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Development Libraries / SGI IRIX 6.2 Development Libraries.iso / dist / complib.idb / usr / share / src / Complib / examples / scfft1d_ex.c.z / scfft1d_ex.c
C/C++ Source or Header  |  1996-03-14  |  3KB  |  99 lines

  1. /*
  2.  * scfft1d_ex.c
  3.  *
  4.  *       This simple example illustrates the use of the FORTRAN
  5.  *       interface to the complib 1d FFT routines to perform a 
  6.  *       circular shift.
  7.  *
  8.  *       This program requires the number of samples N for the 
  9.  *       sequence and the offset as parameters.
  10.  *
  11.  *
  12.  * Copyright 1995, Silicon Graphics, Inc.
  13.  * ALL RIGHTS RESERVED
  14.  *
  15.  * UNPUBLISHED -- Rights reserved under the copyright laws of the United
  16.  * States.   Use of a copyright notice is precautionary only and does not
  17.  * imply publication or disclosure.
  18.  *
  19.  * U.S. GOVERNMENT RESTRICTED RIGHTS LEGEND:
  20.  * Use, duplication or disclosure by the Government is subject to restrictions
  21.  * as set forth in FAR 52.227.19(c)(2) or subparagraph (c)(1)(ii) of the Rights
  22.  * in Technical Data and Computer Software clause at DFARS 252.227-7013 and/or
  23.  * in similar or successor clauses in the FAR, or the DOD or NASA FAR
  24.  * Supplement.  Contractor/manufacturer is Silicon Graphics, Inc.,
  25.  * 2011 N. Shoreline Blvd. Mountain View, CA 94039-7311.
  26.  *
  27.  * THE CONTENT OF THIS WORK CONTAINS CONFIDENTIAL AND PROPRIETARY
  28.  * INFORMATION OF SILICON GRAPHICS, INC. ANY DUPLICATION, MODIFICATION,
  29.  * DISTRIBUTION, OR DISCLOSURE IN ANY FORM, IN WHOLE, OR IN PART, IS STRICTLY
  30.  * PROHIBITED WITHOUT THE PRIOR EXPRESS WRITTEN PERMISSION OF SILICON
  31.  * GRAPHICS, INC.
  32.  *
  33.  *      To build executable:
  34.  *       % cc -o scfft1d_ex scfft1d_ex.c -lcomplib.sgimath -lm
  35.  *
  36.  *    To run executable:
  37.  *       % scfft1d_ex 7 2
  38.  *       Printing " Input Array " of size 7 :
  39.  *           0.00    1.00    2.00    3.00    4.00    5.00    6.00
  40.  *       Printing " Filter  " of size 7 :
  41.  *           0.00    0.00    1.00    0.00    0.00    0.00    0.00
  42.  *       Printing " Scaled Inverse FFT of Array.Filter " of size 7 :
  43.  *           5.00    6.00    0.00    1.00    2.00    3.00    4.00
  44.  */
  45.  
  46. #include <stdio.h>
  47. #include <fft.h>
  48.  
  49. void print_array( int N, char string[], float array[]) {
  50.     printf( "Printing \" %s \" of size %d :\n", string, N);
  51.     for( ; N > 0 ; N--)
  52.         printf(" %7.2f", *array++);
  53.     printf("\n");
  54. }
  55.  
  56.  
  57. main( int argc, char *argv[]) {
  58.  
  59. #define SIZE 8
  60.     int i, N, offset;
  61.     float Array[2*((SIZE+2)/2)], Filter[2*((SIZE+2)/2)], *coef;
  62.  
  63. /*
  64.  *  Number of samples N and OFFSET.
  65.  */
  66.     N = atoi( argv[1]);
  67.     offset = atoi( argv[2]);
  68.  
  69. /*
  70.  *  Generate smaples.
  71.  */
  72.     for ( i = 0 ; i < N ; i++) {
  73.         Array[i]  = (float)i;
  74.         Filter[i] = 0.0;
  75.     }
  76.     Filter[offset] = 1.0;
  77.  
  78. /*
  79.  *  Print out input samples.
  80.  */
  81.     print_array( N, "Input Array", Array);
  82.     print_array( N, "Filter ", Filter);
  83.  
  84. /*
  85.  *  Calculate circular shift.
  86.  */
  87.     coef = sfft1dui( N, NULL);
  88.     scfft1du( -1, N, Array, 1, coef);
  89.     scfft1du( -1, N, Filter, 1, coef);
  90.     sprod1du( N, Array, 1, Filter, 1);
  91.     csfft1du(  1, N, Array, 1, coef);
  92.     sscal1d( N, 1./(float)N, Array, 1);
  93.  
  94. /*
  95.  *  Print out results.
  96.  *
  97.     print_array( N, "Scaled Inverse FFT of Array.Filter", Array);
  98. }
  99.